package tcln.sors.model.base.dom;

import java.util.Date;

/**
 * Common interface for a 'deliverable' entity.
 * 
 * @author Truong Chau Lien Ngoc (lienngoc@gmail.com)
 */
public interface DeliverableEntity {

    /**
     * Returns the actual delivery date.
     * 
     * @return
     */
    Date getDeliveryDate();

    /**
     * Sets new delivery date.
     * 
     * @param deliveryDate
     *            the new deliveryDate to set
     */
    void setDeliveryDate(Date deliveryDate);

    /**
     * Returns the creation date.
     * 
     * @return the creatton date.
     */
    Date getCreationDate();

    /**
     * Sets new creation date.
     * 
     * @param creationDate
     *            the new creationDate to set
     */
    void setCreationDate(Date creationDate);

    /**
     * Returns the estimated deadline.
     * 
     * @return the deadline.
     */
    Date getExpiryDate();

    /**
     * Sets new deadline.
     * 
     * @param expiryDate
     *            the new expiryDate to set
     */
    void setExpiryDate(Date expiryDate);

    /**
     * Returns the interval (in days) which the system must remind users about the deadline.
     * 
     * @return
     */
    Integer getRemindBefore();

    /**
     * Sets new the interval (in days).
     * 
     * @param remindBefore
     *            the new remindBefore to set
     */
    void setRemindBefore(Integer remindBefore);
}
